package com.suning.sawp.intf.bind;

import java.util.List;
import java.util.Map;

import com.suning.sawp.dto.common.QueryResult;
import com.suning.sawp.dto.common.ReturnMsg;
import com.suning.sawp.dto.mainpush.StoreManDto;
import com.suning.sawp.dto.precharge.CommonRtn;
import com.suning.sawp.intf.bind.dto.ApplyAndBindRtnDto;
import com.suning.sawp.intf.bind.dto.BindDeviceInfoDto;
import com.suning.sawp.intf.bind.dto.BindOperationDto;
import com.suning.sawp.intf.bind.dto.BindRecordDto;
import com.suning.sawp.intf.bind.dto.BindUnlockApplyDto;

/***
 * 
 * 用户绑定设备服务<br> 
 * 〈功能详细描述〉
 *
 * @author 17061157
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface BindDeviceService {
	/**
     * 
     * 功能描述: 查询用户的绑定设备功能是否被锁定<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean staffIsLock(String staffId,String deviceId);
	
	/**
     * 
     * 功能描述: 查询用户的绑定设备信息<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	BindRecordDto queryCurrBindInfo(String staffId);
	
	/**
     * 
     * 功能描述: 查询用户在最近7天内绑定次数是否超过3次<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean queryBindsIn7days(String staffId);
	/**
     * 
     * 功能描述: 查询用户申请解锁信息<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	BindUnlockApplyDto queryUnlockApplyInfo(String staffId);
	
	/**
	 * 
	 * 功能描述: 查询用户最近三次绑定设备信息<br>
	 * 〈功能详细描述〉
	 *
	 * @param staffId     工号
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	List<BindRecordDto> queryLatestThreeBindInfo(String staffId);
	
	/**
     * 
     * 功能描述: 校验用户是否已经申请了解锁<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean alreadyApplyUnlock(String staffId);
	
	/**
     * 
     * 功能描述: 用户发起解锁申请<br>
     * 〈功能详细描述〉
     *
     * @param staffId     工号
     * @param deviceId    发起申请的设备ID
     * @param deviceName    发起申请的设备名称
     * @param applyReason    发起申请的原因
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	ReturnMsg<CommonRtn> unlockApply(String staffId, String deviceId, String deviceName, String applyReason, String ip);
	
	/**
     * 
     * 功能描述: 查询工号绑定信息<br>
     * 〈功能详细描述〉 分页查询用户权限范围内的工号绑定信息
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	ReturnMsg<QueryResult<BindDeviceInfoDto>> queryBindInfoList(Map<String, Object> queryMap, Integer pageNo, Integer pageLimit);
	
	/**
     * 
     * 功能描述: 查询绑定设备的后台操作历史<br>
     * 〈功能详细描述〉 查询指定工号的绑定设备的后台操作历史
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	ReturnMsg<QueryResult<BindOperationDto>> queryBindOperationHis(String staffId);
	
	/**
     * 
     * 功能描述: 查询指定工号的绑定设备记录<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	ReturnMsg<QueryResult<BindRecordDto>> queryBindHistory(String staffId);
	
	/**
     * 
     * 功能描述: 查询工号是否在白名单<br>
     * 〈功能详细描述〉  
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean queryWhitelistStatus(String staffId);
	
	/**
     * 
     * 功能描述: 添加白名单操作<br>
     * 〈功能详细描述〉  
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean addWhitelist(String staffId, String operatorId, String operatorName);
	
	/**
	 * 
	 * 功能描述: 移除白名单操作<br>
	 * 〈功能详细描述〉  
	 *
	 * @param staffId     工号
	 * @return
	 * @see [相关类/方法](可选)
	 * @since [产品/模块版本](可选)
	 */
	boolean removeWhitelist(String staffId, String operatorId, String operatorName);
	
	
	/**
     * 
     * 功能描述: 解锁<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @param deviceId     更好当前绑定设备ID
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean UnlockLockedStaff(String staffId, String deviceId, String operatorId, String operatorName);
	
	/**
     * 
     * 功能描述: 驳回解锁申请<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @param deviceId     
     * @param reason     
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean RejectUnlockedApply(String staffId, String deviceId, String reason, String operatorId, String operatorName);
	
	/**
     * 
     * 功能描述: 增加绑定信息<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @param deviceId     
     * @param staffName   
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean addBindInfo(String staffId, StoreManDto staffInfo, String deviceId, 
			String deviceName, String opStaffId, String opStaffName, int opType, String ip);
	
	/**
     * 
     * 功能描述: 删除绑定信息<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	boolean deleteBindInfo(String staffId);
	
	/**
     * 
     * 功能描述: 查询解锁申请的驳回信息<br>
     * 〈功能详细描述〉 
     *
     * @param staffId     工号
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
	ApplyAndBindRtnDto queryRejectInfo(String staffId);
	
}
